[libc++] Fix PR22922 - Allocator support for std::function does not know how to rebind. Summary: This patch changes std::function to use allocator_traits to rebind the allocator instead of allocator itself. It also changes most of the tests to use `bare_allocator` where possible instead of `test_allocator`. Reviewers: mclow.lists Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D8391 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@232686 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/functional b/include/functional index 070347a..35e661b 100644 --- a/include/functional +++ b/include/functional 
@@ -1367,7 +1367,14 @@  __base<_Rp(_ArgTypes...)>*  __func<_Fp, _Alloc, _Rp(_ArgTypes...)>::__clone() const  { - typedef typename _Alloc::template rebind<__func>::other _Ap; + typedef allocator_traits<_Alloc> __alloc_traits; + typedef typename __alloc_traits::template +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES + rebind_alloc<__func> +#else + rebind_alloc<__func>::other +#endif + _Ap;  _Ap __a(__f_.second());  typedef __allocator_destructor<_Ap> _Dp;  unique_ptr<__func, _Dp> __hold(__a.allocate(1), _Dp(__a, 1)); @@ -1393,7 +1400,14 @@  void  __func<_Fp, _Alloc, _Rp(_ArgTypes...)>::destroy_deallocate() _NOEXCEPT  { - typedef typename _Alloc::template rebind<__func>::other _Ap; + typedef allocator_traits<_Alloc> __alloc_traits; + typedef typename __alloc_traits::template +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES + rebind_alloc<__func> +#else + rebind_alloc<__func>::other +#endif + _Ap;  _Ap __a(__f_.second());  __f_.~__compressed_pair<_Fp, _Alloc>();  __a.deallocate(this, 1);